#!/bin/bash

#########################################
# Author: Zou Ding
# WordCount 自动编译 + 打包 + 运行脚本
#########################################

BASE_DIR="/home/hadoop/hw2_hadoop/java_code/s522025320243-邹丁-hadoop-assignment"
SRC_DIR="${BASE_DIR}/src/main/java"
TARGET_DIR="${BASE_DIR}/target"
CLASSES_DIR="${TARGET_DIR}/classes"
JAR_FILE="${BASE_DIR}/hadoop-assignment.jar"

STUDENT_ID="s522025320243"
MAIN_CLASS="com.bigdata.assignment.problem1.WordCountDriver"
INPUT_DIR="/public/data/wordcount"
OUTPUT_DIR="/users/${STUDENT_ID}/homework1/problem1"

# 本地保存目录
LOCAL_SAVE_DIR="${BASE_DIR}/output/problem1"

echo "==============================="
echo "    🚀 Problem 1: WordCount"
echo "==============================="

#########################################
# 1. 清理旧文件
#########################################
echo "🧹 清理旧的 target 目录..."
rm -rf "${CLASSES_DIR}" "${JAR_FILE}"
mkdir -p "${CLASSES_DIR}"

#########################################
# 2. 编译 Java 源码
#########################################
echo "🔨 正在编译 Java 源码..."

javac -cp "$(hadoop classpath)" -d "${CLASSES_DIR}" $(find "${SRC_DIR}" -name "*.java")
if [ $? -ne 0 ]; then
    echo "❌ 编译失败！"
    exit 1
fi

echo "✅ Java 编译成功"

#########################################
# 3. 打包成 JAR
#########################################
echo "📦 正在生成 JAR 包..."

jar -cvf "${JAR_FILE}" -C "${CLASSES_DIR}" .
if [ $? -ne 0 ]; then
    echo "❌ 打包失败！"
    exit 1
fi

echo "✅ JAR 包已生成：${JAR_FILE}"

#########################################
# 4. 运行 Hadoop 任务
#########################################
echo "🚀 正在运行 Hadoop WordCount..."

# 删除旧输出
hdfs dfs -rm -r -f "${OUTPUT_DIR}" >/dev/null

hadoop jar "${JAR_FILE}" ${MAIN_CLASS} ${INPUT_DIR} ${OUTPUT_DIR}
if [ $? -ne 0 ]; then
    echo "❌ Hadoop 任务失败！"
    exit 1
fi

#########################################
# 5. 显示结果预览
#########################################
echo "📄 输出结果预览（前 20 行）："
hdfs dfs -cat ${OUTPUT_DIR}/words.txt | head -n 20

#########################################
# 6. 保存输出内容到本地
#########################################
echo "💾 保存结果到本地目录：${LOCAL_SAVE_DIR}"
mkdir -p "${LOCAL_SAVE_DIR}"

# 下载所有输出文件
hdfs dfs -get -f "${OUTPUT_DIR}/words.txt" "${LOCAL_SAVE_DIR}/words.txt"
hdfs dfs -get -f "${OUTPUT_DIR}/statistics.txt" "${LOCAL_SAVE_DIR}/statistics.txt"

echo "📥 已保存："
echo " - ${LOCAL_SAVE_DIR}/words.txt"
echo " - ${LOCAL_SAVE_DIR}/statistics.txt"

echo "🎉 Problem 1 完成！"
